#include "fila_est.h"
#define MAX 20

struct fila {
    int vetor[MAX];
    int contador, inicio;
};

Fila cria_fila()
{
    Fila fi = (Fila) malloc(sizeof(struct fila));
    if(fi != NULL)
    {
        fi->inicio = 0;
        fi->contador = 0;
    }
    return fi;
}

int fila_vazia(Fila f)
{
    if(f->contador == 0)
        return 1;
    return 0;
}

int fila_cheia(Fila f)
{
    if(f->contador == MAX)
        return 1;
    return 0;
}

int insere_fim(Fila f, int elem)
{
    if(fila_cheia(f))
        return 0;
    /* Insere elemento no final */
    f->vetor[(f->inicio + f->contador) % MAX] = elem;
    f->contador++;  /* Incremento normal */
    return 1;
}

int remove_inicio(Fila f, int *elem)
{
    if(fila_vazia(f))
        return 0;

    *elem = f->vetor[f->inicio];
    f->inicio = (f->inicio + 1) % MAX; /* Incremento circular */
    f->contador--; /* Decremento não circular */
}

int print_fila(Fila f)
{
    int i;
    printf("{ ");
    for(i = 0;i < f->contador;i++)
        printf("%d ", f->vetor[i]);
    printf("}\n");
}
